hostComponent.get('actualConfigs').forEach(function(config){
   if(serviceTemplate.sites.contains(config.site)){
     var desiredClusterTag = clusterToDesiredMap[config.site].tag;
     var desiredHostOverrideTag = clusterToDesiredMap[config.site].hostOverrides[hostName];
     var actualClusterTag = config.tag;
     var actualHostOverrideTag = config.hostOverrides[hostName];
     var siteRestartRequired = false;
     if(actualClusterTag !== desiredClusterTag || actualHostOverrideTag !== desiredHostOverrideTag){
       var publicHostName = host.get('publicHostName');
       if(config.site=='global'){
         var serviceName = hostComponent.get('service.serviceName');
         if(actualClusterTag !== desiredClusterTag){
           siteRestartRequired = App.config.isServiceEffectedByGlobalChange(serviceName, actualClusterTag, desiredClusterTag);
         }
         if(actualHostOverrideTag !== desiredHostOverrideTag){
           siteRestartRequired = App.config.isServiceEffectedByGlobalChange(serviceName, actualHostOverrideTag, desiredHostOverrideTag);
         }
       }else{
         siteRestartRequired = true
       }
       if(siteRestartRequired){
         restartRequired = true;
         if(!(publicHostName in restartRequiredHostsAndComponents)){
           restartRequiredHostsAndComponents[publicHostName] = [];
         }
         var hostComponentName = hostComponent.get('displayName');
         if(restartRequiredHostsAndComponents[publicHostName].indexOf(hostComponentName)<0){
           restartRequiredHostsAndComponents[publicHostName].push(hostComponentName);
         }
       }
     }
   }
 });
 it('should return "AdvancedCoreSite" if filename "core-site.xml" and serviceName "HDFS"', function () {
   data = {
     serviceName: 'HDFS',
     filename: 'core-site.xml'
   }
   expect(App.config.identifyCategory(data).name).to.equal('AdvancedCoreSite');
 });
Exemple #3
0
 loadConfigThemes: function () {
   var self = this;
   var dfd = $.Deferred();
   if (!this.get('stackConfigsLoaded')) {
     var serviceNames = App.StackService.find().filter(function (s) {
       return s.get('isSelected') || s.get('isInstalled');
     }).mapProperty('serviceName');
     // Load stack configs before loading themes
     App.config.loadClusterConfigsFromStack().always(function() {
       App.config.loadConfigsFromStack(serviceNames).done(function () {
         if (App.get('isClusterSupportsEnhancedConfigs')) {
           self.loadConfigThemeForServices(serviceNames).always(function () {
             self.set('stackConfigsLoaded', true);
             App.themesMapper.generateAdvancedTabs(serviceNames);
             dfd.resolve();
           });
         } else {
           self.set('stackConfigsLoaded', true);
           dfd.resolve();
         }
       });
     });
   }
   else {
     dfd.resolve();
     this.set('stackConfigsLoaded', true);
   }
   return dfd.promise();
 },
  componentProperties: function (serviceName) {

    var serviceConfigs = App.config.get('preDefinedServiceConfigs').findProperty('serviceName', serviceName);

    var configs = [];
    var componentName = null;
    switch (serviceName) {
      case 'HDFS':
        componentName = 'DataNode';
        break;
      case 'MAPREDUCE':
        componentName = 'TaskTracker';
        break;
      case 'HBASE':
        componentName = 'RegionServer';
    }
    var slaveConfigs = serviceConfigs.configs.filterProperty('category', componentName);
    slaveConfigs.forEach(function (_serviceConfigProperty) {
      var serviceConfigProperty = App.ServiceConfigProperty.create(_serviceConfigProperty);

      switch(serviceConfigProperty.name){
        case 'dfs_data_dir' :
          serviceConfigProperty.initialValue();
          break;
        case 'mapred_local_dir' :
          serviceConfigProperty.initialValue();
          break;
      }
      configs.pushObject(serviceConfigProperty);
      serviceConfigProperty.validate();
    }, this);
    return configs;
  },
 it('should return "CapacityScheduler" if filename "capacity-scheduler.xml" and serviceName "YARN"', function () {
   data = {
     serviceName: 'YARN',
     filename: 'capacity-scheduler.xml'
   }
   expect(App.config.identifyCategory(data).name).to.equal('CapacityScheduler');
 });
 it('isUserProperty should be true if config is custom(site.xml) and not advanced', function () {
   config = {
     serviceName: 'HDFS',
     filename: 'core-site.xml'
   };
   App.config.calculateConfigProperties(config, isAdvanced, advancedConfigs);
   expect(config.isUserProperty).to.equal(true);
 });
Exemple #7
0
 getConfigId: function(json) {
   if (json && json.config && typeof json.config === "string") {
     var split = json.config.split("/");
     return App.config.configId(split[1], split[0]);
   } else {
     console.warn('getConfigId: invalid input data');
     return null;
   }
 },
Exemple #8
0
    Em.getWithDefault(json, "ThemeInfo.theme_data.Theme.configuration.placement.configs", []).forEach(function(configLink) {
      var configId = this.getConfigId(configLink);
      var subSectionId = configLink["subsection-name"];
      var subSectionTabId = configLink["subsection-tab-name"];
      if (subSectionTabId) {
        var subSectionTab = App.SubSectionTab.find(subSectionTabId);
      } else if (subSectionId) {
        var subSection = App.SubSection.find(subSectionId);
      }
      var configProperty = App.StackConfigProperty.find(configId);

      var dependsOnConfigs = configLink["depends-on"] || [];

      if (configProperty.get('id') && subSection) {
        subSection.get('configProperties').pushObject(configProperty);
        configProperty.set('subSection', subSection);
      } else if (configProperty.get('id') && subSectionTab) {
        subSectionTab.get('configProperties').pushObject(configProperty);
        configProperty.set('subSectionTab', subSectionTab);
      } else {
        console.log('there is no such property: ' + configId + '. Or subsection: ' + subSectionId);
        var valueAttributes = configLink["property_value_attributes"];
        if (valueAttributes) {
          var isUiOnlyProperty = valueAttributes["ui_only_property"];
          // UI only configs are mentioned in the themes for supporting widgets that is not intended for setting a value
          // And thus is affiliated with fake config property termed as ui only config property
          if (isUiOnlyProperty && subSection) {
            var split = configLink.config.split("/");
            var fileName =  split[0] + '.xml';
            var configName = split[1];
            var uiOnlyConfig = App.uiOnlyConfigDerivedFromTheme.filterProperty('filename', fileName).findProperty('name', configName);
            if (!uiOnlyConfig) {
              var coreObject = {
                id: configName + '_' + split[0],
                isRequiredByAgent: false,
                showLabel: false,
                isOverridable: false,
                recommendedValue: true,
                name: configName,
                isUserProperty: false,
                filename: fileName,
                serviceName: serviceName,
                subSection: subSection
              };
              var uiOnlyConfigDerivedFromTheme = Em.Object.create(App.config.createDefaultConfig(configName, serviceName, fileName, false, coreObject));
              App.uiOnlyConfigDerivedFromTheme.pushObject(uiOnlyConfigDerivedFromTheme);
            }
          }
        }
      }

      // map all the configs which conditionally affect the value attributes of a config
      if (dependsOnConfigs && dependsOnConfigs.length) {
        this.mapThemeConfigConditions(dependsOnConfigs, uiOnlyConfigDerivedFromTheme || configProperty);
      }

    }, this);
Exemple #9
0
      _content.get('configs').forEach(function (_configProperties) {
        if (!Em.isNone(_configProperties.get('group'))) {
          return false;
        }
        var configProperty = App.config.createDefaultConfig(
          _configProperties.get('name'),
          _configProperties.get('serviceName'),
          _configProperties.get('filename'),
          _configProperties.get('isUserProperty'),
          {value: _configProperties.get('value')}
        );
        configProperty = App.config.mergeStaticProperties(configProperty, _configProperties, ['name', 'filename']);

        if (this.isExcludedConfig(configProperty)) {
          configProperty.value = '';
        }
        serviceConfigProperties.push(configProperty);
      }, this);
 it('value should be transformed to false from "false"', function () {
   config = {
     displayType: 'checkbox',
     value: 'false',
     defaultValue: 'false'
   };
   App.config.handleSpecialProperties(config);
   expect(config.value).to.equal(false);
   expect(config.defaultValue).to.equal(false);
 });
 it('value should be transformed to "1024" from "1024m"', function () {
   config = {
     displayType: 'int',
     value: '1024m',
     defaultValue: '1024m'
   };
   App.config.handleSpecialProperties(config);
   expect(config.value).to.equal('1024');
   expect(config.defaultValue).to.equal('1024');
 });
 it('isUserProperty should be false if config from "capacity-scheduler.xml" or "mapred-queue-acls.xml" ', function () {
   config = {
     name: 'test',
     serviceName: 'MAPREDUCE',
     filename: 'capacity-scheduler.xml',
     isUserProperty: false
   };
   isAdvanced = true;
   App.config.calculateConfigProperties(config, isAdvanced, advancedConfigs);
   expect(config.isUserProperty).to.equal(false);
 });
Exemple #13
0
 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']));
 },
 it('isRequired should be false if config is advanced"', function () {
   config = {
     name: 'test',
     serviceName: 'HDFS',
     filename: 'core-site.xml'
   };
   isAdvanced = true;
   advancedConfigs = [{name:'test', filename: 'test.xml'}];
   App.config.calculateConfigProperties(config, isAdvanced, advancedConfigs);
   expect(config.category).to.equal('Advanced');
   expect(config.isRequired).to.equal(true);
   expect(config.filename).to.equal('test.xml');
 });
Exemple #15
0
  setDynamicConfigValues: function (configs, zkPort, webAddressPort, httpsWebAddressPort, yarnUser) {
    var
      configProperties = configs.configs,
      currentRMHost = this.get('content.rmHosts.currentRM'),
      additionalRMHost = this.get('content.rmHosts.additionalRM'),
      rmHosts = currentRMHost + ',' + additionalRMHost,
      zooKeeperHostsWithPort = App.HostComponent.find().filterProperty('componentName', 'ZOOKEEPER_SERVER').map(function (item) {
        return item.get('hostName') + ':' + zkPort;
      }).join(',');

    configProperties.findProperty('name', 'yarn.resourcemanager.hostname.rm1').set('value', currentRMHost).set('recommendedValue', currentRMHost);
    configProperties.findProperty('name', 'yarn.resourcemanager.hostname.rm2').set('value', additionalRMHost).set('recommendedValue', additionalRMHost);
    configProperties.findProperty('name', 'yarn.resourcemanager.zk-address').set('value', zooKeeperHostsWithPort).set('recommendedValue', zooKeeperHostsWithPort);

    configProperties.findProperty('name', 'yarn.resourcemanager.webapp.address.rm1')
      .set('value', currentRMHost + webAddressPort)
      .set('recommendedValue', currentRMHost + webAddressPort);

    configProperties.findProperty('name', 'yarn.resourcemanager.webapp.address.rm2')
      .set('value', additionalRMHost + webAddressPort)
      .set('recommendedValue', additionalRMHost + webAddressPort);

    configProperties.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm1')
      .set('value', currentRMHost + httpsWebAddressPort)
      .set('recommendedValue', currentRMHost + httpsWebAddressPort);

    configProperties.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm2')
      .set('value', additionalRMHost + httpsWebAddressPort)
      .set('recommendedValue', additionalRMHost + httpsWebAddressPort);

    var proxyUserConfig = App.ServiceConfigProperty.create(App.config.createDefaultConfig('hadoop.proxyuser.' + yarnUser + '.hosts',
      'MISC', 'core-site', false,  {category : "HDFS", isUserProperty: false, isEditable: false, isOverridable: false}));
    configProperties.pushObject(proxyUserConfig);

    proxyUserConfig.setProperties({'value': rmHosts, 'recommendedValue': rmHosts});

    if (App.Service.find().someProperty('serviceName', 'HAWQ')) {
      var yarnHAPort = 8032;
      var yarnHAHosts = currentRMHost + ':' + yarnHAPort.toString() + ',' + additionalRMHost + ':' + yarnHAPort.toString();
      configProperties.findProperty('name', 'yarn.resourcemanager.ha')
        .set('value', yarnHAHosts)
        .set('recommendedValue', yarnHAHosts);

      var yarnHASchPort = 8030;
      var yarnHASchHosts = currentRMHost + ':' + yarnHASchPort.toString() + ',' + additionalRMHost + ':' + yarnHASchPort.toString();
      configProperties.findProperty('name', 'yarn.resourcemanager.scheduler.ha')
        .set('value', yarnHASchHosts)
        .set('recommendedValue', yarnHASchHosts);
    }
  },
Exemple #16
0
 App.config.loadClusterConfigsFromStack().always(function() {
   App.config.loadConfigsFromStack(serviceNames).done(function () {
     if (App.get('isClusterSupportsEnhancedConfigs')) {
       self.loadConfigThemeForServices(serviceNames).always(function () {
         self.set('stackConfigsLoaded', true);
         App.themesMapper.generateAdvancedTabs(serviceNames);
         dfd.resolve();
       });
     } else {
       self.set('stackConfigsLoaded', true);
       dfd.resolve();
     }
   });
 });
 loadConfigsByTags: function (tags,dfd) {
   var self = this;
   var loadedConfigs = [];
   App.config.loadConfigsByTags(tags).done(function (data) {
     if (data.items) {
       data.items.forEach(function (item) {
         loadedConfigs.push(item);
       });
     }
   }).complete(function () {
     self.saveToDB(loadedConfigs);
     dfd.resolve(loadedConfigs);
   });
 },
 loadFromServer: function (tags) {
   var loadedConfigs = App.config.loadConfigsByTags(tags);
   var storedConfigs = App.db.getConfigs();
   loadedConfigs.forEach(function (loadedSite) {
     var storedSite = storedConfigs.findProperty('type', loadedSite.type);
     if (storedSite) {
       storedSite.tag = loadedSite.tag;
       storedSite.properties = loadedSite.properties;
     } else {
       storedConfigs.push(loadedSite);
     }
   });
   App.db.setConfigs(storedConfigs);
   return loadedConfigs;
 }
Exemple #19
0
 prepareConfigProperties: function (configs) {
   var self = this;
   var configProperties = configs.slice(0);
   var siteProperties = App.config.get('preDefinedSiteProperties');
   var installedServiceNames = ['Cluster'].concat(App.Service.find().mapProperty('serviceName'));
   configProperties = configProperties.filter(function (item) {
     return installedServiceNames.contains(item.get('serviceName'));
   });
   configProperties.setEach('isSecureConfig', false);
   configProperties.forEach(function (property, item, allConfigs) {
     if (['spnego_keytab', 'spnego_principal'].contains(property.get('name'))) {
       property.addObserver('value', self, 'spnegoPropertiesObserver');
     }
     if (property.get('observesValueFrom')) {
       var observedValue = allConfigs.findProperty('name', property.get('observesValueFrom')).get('value');
       property.set('value', observedValue);
       property.set('recommendedValue', observedValue);
     }
     if (property.get('serviceName') == 'Cluster') {
       property.set('category', 'Global');
     } else {
       property.set('category', property.get('serviceName'));
     }
     // All user identity should be grouped under "Ambari Principals" category
     if (property.get('identityType') == 'user') property.set('category', 'Ambari Principals');
     var siteProperty = siteProperties.findProperty('name', property.get('name'));
     if (siteProperty) {
       if (siteProperty.category === property.get('category')) {
         property.set('displayName', siteProperty.displayName);
         if (siteProperty.index) {
           property.set('index', siteProperty.index);
         }
       }
       if (siteProperty.displayType) {
         property.set('displayType', siteProperty.displayType);
       }
     }
   });
   configProperties.setEach('isEditable', false);
   return configProperties;
 },
Exemple #20
0
    stepController.get('stepConfigs').forEach(function (_content) {
      if (_content.serviceName === 'YARN') {
        _content.set('configs', App.config.textareaIntoFileConfigs(_content.get('configs'), 'capacity-scheduler.xml'));
      }
      _content.get('configs').forEach(function (_configProperties) {
        if (!Em.isNone(_configProperties.get('group'))) {
          return false;
        }
        var configProperty = App.config.createDefaultConfig(
          _configProperties.get('name'),
          _configProperties.get('serviceName'),
          _configProperties.get('filename'),
          _configProperties.get('isUserProperty'),
          {value: _configProperties.get('value')}
        );
        configProperty = App.config.mergeStaticProperties(configProperty, _configProperties, ['name', 'filename']);

        if (this.isExcludedConfig(configProperty)) {
          configProperty.value = '';
        }
        serviceConfigProperties.push(configProperty);
      }, this);
      // check for configs that need to update for installed services
      if (installedServiceNamesMap[_content.get('serviceName')]) {
        // get only modified configs
        var configs = _content.get('configs').filter(function (config) {
          if (config.get('isNotDefaultValue') || (config.get('savedValue') === null)) {
            return config.isRequiredByAgent!== false;
          }
          return false;
        });
        // if modified configs detected push all service's configs for update
        if (configs.length) {
          fileNamesToUpdate = fileNamesToUpdate.concat(configs.mapProperty('filename').uniq());
        }
      }
    }, this);
Exemple #21
0
var App = require('app');
require('utils/config');

App.Service = DS.Model.extend({
  serviceName: DS.attr('string'),
  displayName: function() {
    return App.format.role(this.get('serviceName'));
  }.property('serviceName'),
  passiveState: DS.attr('string'),
  workStatus: DS.attr('string'),
  rand: DS.attr('string'),
  toolTipContent: DS.attr('string'),
  quickLinks: DS.hasMany('App.QuickLinks'),  // mapped in app/mappers/service_metrics_mapper.js method - mapQuickLinks
  hostComponents: DS.hasMany('App.HostComponent'),
  serviceConfigsTemplate: App.config.get('preDefinedServiceConfigs'),
  /**
   * used by services("OOZIE", "ZOOKEEPER", "HIVE", "MAPREDUCE2", "TEZ", "SQOOP", "PIG","FALCON")
   * that have only client components
   */
  installedClients: DS.attr('number'),

  clientComponents: DS.hasMany('App.ClientComponent'),
  slaveComponents: DS.hasMany('App.SlaveComponent'),
  masterComponents: DS.hasMany('App.MasterComponent'),

  /**
   * @type {bool}
   */
  isInPassive: function() {
    return this.get('passiveState') === "ON";
 serviceConfigTags.forEach(function (_serviceConfigTags) {
   var configs = _serviceConfigTags.configs;
   for (var key in configs) {
     configs[key] = App.config.escapeXMLCharacters(configs[key]);
   }
 }, this);
 it('should return null if config doesn\'t have category', function () {
   expect(App.config.identifyCategory(data)).to.equal(null);
 });