Bladeren bron

AMBARI-2070. Changing service directories should popup a confirmation/warning dialog upon save. (yusaku)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/trunk@1478605 13f79535-47bb-0310-9956-ffa450edef68
Yusaku Sako 12 jaren geleden
bovenliggende
commit
fec0e3df8a

+ 3 - 0
CHANGES.txt

@@ -283,6 +283,9 @@ Trunk (unreleased changes):
 
 
  IMPROVEMENTS
  IMPROVEMENTS
 
 
+ AMBARI-2070. Changing service directories should popup a confirmation/warning
+ dialog upon save. (yusaku)
+
  AMBARI-2061. HBase Heatmaps: clean up labels and units. (yusaku)
  AMBARI-2061. HBase Heatmaps: clean up labels and units. (yusaku)
 
 
  AMBARI-2042. Update Ambari logo. (yusaku)
  AMBARI-2042. Update Ambari logo. (yusaku)

+ 8 - 6
ambari-web/app/controllers/main/host/details.js

@@ -95,7 +95,7 @@ App.MainHostDetailsController = Em.Controller.extend({
 
 
       self.sendCommandToServer('/hosts/' + self.get('content.hostName') + '/host_components/' + component.get('componentName').toUpperCase(),{
       self.sendCommandToServer('/hosts/' + self.get('content.hostName') + '/host_components/' + component.get('componentName').toUpperCase(),{
         RequestInfo : {
         RequestInfo : {
-          "context" : Em.I18n.t('requestInfo.startHostComponent') + " " + component.get('componentName').toUpperCase()
+          "context" : Em.I18n.t('requestInfo.startHostComponent') + " " + component.get('displayName')
         },
         },
         Body:{
         Body:{
           HostRoles:{
           HostRoles:{
@@ -136,7 +136,7 @@ App.MainHostDetailsController = Em.Controller.extend({
     App.showConfirmationPopup(function() {
     App.showConfirmationPopup(function() {
       self.sendCommandToServer('/hosts/' + self.get('content.hostName') + '/host_components/' + component.get('componentName').toUpperCase(),{
       self.sendCommandToServer('/hosts/' + self.get('content.hostName') + '/host_components/' + component.get('componentName').toUpperCase(),{
             RequestInfo : {
             RequestInfo : {
-              "context" : Em.I18n.t('requestInfo.upgradeHostComponent') + " " + component.get('componentName').toUpperCase()
+              "context" : Em.I18n.t('requestInfo.upgradeHostComponent') + " " + component.get('displayName')
             },
             },
             Body:{
             Body:{
               HostRoles:{
               HostRoles:{
@@ -176,7 +176,7 @@ App.MainHostDetailsController = Em.Controller.extend({
       var component = event.context;
       var component = event.context;
       self.sendCommandToServer('/hosts/' + self.get('content.hostName') + '/host_components/' + component.get('componentName').toUpperCase(),{
       self.sendCommandToServer('/hosts/' + self.get('content.hostName') + '/host_components/' + component.get('componentName').toUpperCase(),{
         RequestInfo : {
         RequestInfo : {
-          "context" : Em.I18n.t('requestInfo.stopHostComponent')+ " " + component.get('componentName').toUpperCase()
+          "context" : Em.I18n.t('requestInfo.stopHostComponent')+ " " + component.get('displayName')
         },
         },
         Body:{
         Body:{
           HostRoles:{
           HostRoles:{
@@ -215,6 +215,7 @@ App.MainHostDetailsController = Em.Controller.extend({
     var self = this;
     var self = this;
     var component = event.context;
     var component = event.context;
     var componentName = component.get('componentName').toUpperCase().toString();
     var componentName = component.get('componentName').toUpperCase().toString();
+    var displayName = component.get('displayName');
 
 
     App.ModalPopup.show({
     App.ModalPopup.show({
       primary: Em.I18n.t('yes'),
       primary: Em.I18n.t('yes'),
@@ -230,7 +231,7 @@ App.MainHostDetailsController = Em.Controller.extend({
         this.hide();
         this.hide();
         self.sendCommandToServer('/hosts?Hosts/host_name=' + self.get('content.hostName'), {
         self.sendCommandToServer('/hosts?Hosts/host_name=' + self.get('content.hostName'), {
             RequestInfo: {
             RequestInfo: {
-              "context": Em.I18n.t('requestInfo.installHostComponent') + " " + componentName
+              "context": Em.I18n.t('requestInfo.installHostComponent') + " " + displayName
             },
             },
             Body: {
             Body: {
               host_components: [
               host_components: [
@@ -249,7 +250,7 @@ App.MainHostDetailsController = Em.Controller.extend({
 
 
             self.sendCommandToServer('/host_components?HostRoles/host_name=' + self.get('content.hostName') + '\&HostRoles/component_name=' + componentName + '\&HostRoles/state=INIT', {
             self.sendCommandToServer('/host_components?HostRoles/host_name=' + self.get('content.hostName') + '\&HostRoles/component_name=' + componentName + '\&HostRoles/state=INIT', {
                 RequestInfo: {
                 RequestInfo: {
-                  "context": Em.I18n.t('requestInfo.installNewHostComponent') + " " + componentName
+                  "context": Em.I18n.t('requestInfo.installNewHostComponent') + " " + displayName
                 },
                 },
                 Body: {
                 Body: {
                   HostRoles: {
                   HostRoles: {
@@ -291,6 +292,7 @@ App.MainHostDetailsController = Em.Controller.extend({
     var self = this;
     var self = this;
     var component = event.context;
     var component = event.context;
     var componentName = component.get('componentName').toUpperCase().toString();
     var componentName = component.get('componentName').toUpperCase().toString();
+    var displayName = component.get('displayName');
 
 
     App.ModalPopup.show({
     App.ModalPopup.show({
       primary: Em.I18n.t('yes'),
       primary: Em.I18n.t('yes'),
@@ -306,7 +308,7 @@ App.MainHostDetailsController = Em.Controller.extend({
         this.hide();
         this.hide();
         self.sendCommandToServer('/hosts/' + self.get('content.hostName') + '/host_components/' + component.get('componentName').toUpperCase(), {
         self.sendCommandToServer('/hosts/' + self.get('content.hostName') + '/host_components/' + component.get('componentName').toUpperCase(), {
             RequestInfo: {
             RequestInfo: {
-              "context": Em.I18n.t('requestInfo.installHostComponent') + " " + componentName
+              "context": Em.I18n.t('requestInfo.installHostComponent') + " " + displayName
             },
             },
             Body: {
             Body: {
               HostRoles: {
               HostRoles: {

+ 133 - 88
ambari-web/app/controllers/main/service/info/configs.js

@@ -634,116 +634,161 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
     }
     }
     var header;
     var header;
     var message;
     var message;
+    var messageClass;
     var value;
     var value;
     var flag = false;
     var flag = false;
     var runningHosts = null;
     var runningHosts = null;
     var runningComponentCount = 0;
     var runningComponentCount = 0;
+
+    var dfd = $.Deferred();
+    var self = this;
+    var serviceName = this.get('content.serviceName');
+    var displayName = this.get('content.displayName');
+
     if (App.supports.hostOverrides || 
     if (App.supports.hostOverrides || 
-        (this.get('content.serviceName') !== 'HDFS' && this.get('content.isStopped') === true) || 
-        ((this.get('content.serviceName') === 'HDFS') && this.get('content.isStopped') === true && (!App.Service.find().someProperty('id', 'MAPREDUCE') || App.Service.find('MAPREDUCE').get('isStopped')))) {
-      var result = this.saveServiceConfigProperties();
-      App.router.get('clusterController').updateClusterData();
-      flag = result.flag;
-      if (result.flag === true) {
-        header = App.supports.hostOverrides ? Em.I18n.t('services.service.config.restartService') : Em.I18n.t('services.service.config.startService');
-        message = Em.I18n.t('services.service.config.saveConfig');
+        (serviceName !== 'HDFS' && this.get('content.isStopped') === true) ||
+        ((serviceName === 'HDFS') && this.get('content.isStopped') === true && (!App.Service.find().someProperty('id', 'MAPREDUCE') || App.Service.find('MAPREDUCE').get('isStopped')))) {
+
+      var dirChanged = false;
+
+      if (serviceName === 'HDFS') {
+        var hdfsConfigs = self.get('stepConfigs').findProperty('serviceName', 'HDFS').get('configs');
+        if (
+          hdfsConfigs.findProperty('name', 'dfs_name_dir').get('isNotDefaultValue') ||
+          hdfsConfigs.findProperty('name', 'fs_checkpoint_dir').get('isNotDefaultValue') ||
+          hdfsConfigs.findProperty('name', 'dfs_data_dir').get('isNotDefaultValue')
+        ) {
+          dirChanged = true;
+        }
+      } else if (serviceName === 'MAPREDUCE') {
+        var mapredConfigs = self.get('stepConfigs').findProperty('serviceName', 'MAPREDUCE').get('configs');
+        if (
+          mapredConfigs.findProperty('name', 'mapred_local_dir').get('isNotDefaultValue') ||
+          mapredConfigs.findProperty('name', 'mapred_system_dir').get('isNotDefaultValue')
+        ) {
+          dirChanged = true;
+        }
+      }
+
+      if (dirChanged) {
+        App.showConfirmationPopup(function() {
+          dfd.resolve();
+        }, Em.I18n.t('services.service.config.confirmDirectoryChange').format(displayName));
       } else {
       } else {
-        header = Em.I18n.t('common.failure');
-        message = result.message;
-        value = result.value;
+        dfd.resolve();
       }
       }
+
+      dfd.done(function() {
+        var result = self.saveServiceConfigProperties();
+        App.router.get('clusterController').updateClusterData();
+        flag = result.flag;
+        if (result.flag === true) {
+          header = Em.I18n.t('services.service.config.saved');
+          message = Em.I18n.t('services.service.config.saved.message');
+          messageClass = 'alert alert-success';
+        } else {
+          header = Em.I18n.t('common.failure');
+          message = result.message;
+          messageClass = 'alert alert-error';
+          value = result.value;
+        }
+      });
     } else {
     } else {
       var rhc;
       var rhc;
       if (this.get('content.serviceName') !== 'HDFS' || (this.get('content.serviceName') === 'HDFS' && !App.Service.find().someProperty('id', 'MAPREDUCE'))) {
       if (this.get('content.serviceName') !== 'HDFS' || (this.get('content.serviceName') === 'HDFS' && !App.Service.find().someProperty('id', 'MAPREDUCE'))) {
         rhc = this.getRunningHostComponents([this.get('content')]);
         rhc = this.getRunningHostComponents([this.get('content')]);
-        header = Em.I18n.t('services.service.config.stopService');
+        header = Em.I18n.t('services.service.config.notSaved');
         message = Em.I18n.t('services.service.config.msgServiceStop');
         message = Em.I18n.t('services.service.config.msgServiceStop');
       } else {
       } else {
         rhc = this.getRunningHostComponents([this.get('content'), App.Service.find('MAPREDUCE')]);
         rhc = this.getRunningHostComponents([this.get('content'), App.Service.find('MAPREDUCE')]);
-        header = Em.I18n.t('services.service.config.stopService');
+        header = Em.I18n.t('services.service.config.notSaved');
         message = Em.I18n.t('services.service.config.msgHDFSMapRServiceStop');
         message = Em.I18n.t('services.service.config.msgHDFSMapRServiceStop');
       }
       }
+      messageClass = 'alert alert-error';
       runningHosts = rhc.runningHosts;
       runningHosts = rhc.runningHosts;
       runningComponentCount = rhc.runningComponentCount;
       runningComponentCount = rhc.runningComponentCount;
+      dfd.resolve();
     }
     }
-    
-    var self = this;
-    App.ModalPopup.show({
-      header: header,
-      primary: Em.I18n.t('ok'),
-      secondary: null,
-      onPrimary: function () {
-        this.hide();
-        if (flag) {
-          self.loadStep();
-        }
-      },
-      bodyClass: Ember.View.extend({
-        flag: flag,
-        message: message,
-        runningHosts: runningHosts,
-        runningComponentCount: runningComponentCount,
-        siteProperties: value,
-        getDisplayMessage: function () {
-          var displayMsg = [];
-          var siteProperties = this.get('siteProperties');
-          if (siteProperties) {
-            siteProperties.forEach(function (_siteProperty) {
-              var displayProperty = _siteProperty.siteProperty;
-              var displayNames = _siteProperty.displayNames;
-              /////////
-              if (displayNames && displayNames.length) {
-                if (displayNames.length === 1) {
-                  displayMsg.push(displayProperty + Em.I18n.t('as') + displayNames[0]);
-                } else {
-                  var name;
-                  displayNames.forEach(function (_name, index) {
-                    if (index === 0) {
-                      name = _name;
-                    } else if (index === siteProperties.length - 1) {
-                      name = name + Em.I18n.t('and') + _name;
-                    } else {
-                      name = name + ', ' + _name;
-                    }
-                  }, this);
-                  displayMsg.push(displayProperty + Em.I18n.t('as') + name);
 
 
-                }
-              } else {
-                displayMsg.push(displayProperty);
-              }
-            }, this);
+    dfd.done(function () {
+      App.ModalPopup.show({
+        header: header,
+        primary: Em.I18n.t('ok'),
+        secondary: null,
+        onPrimary: function () {
+          this.hide();
+          if (flag) {
+            self.loadStep();
           }
           }
-          return displayMsg;
+        },
+        bodyClass: Ember.View.extend({
+          flag: flag,
+          message: message,
+          messageClass: messageClass,
+          runningHosts: runningHosts,
+          runningComponentCount: runningComponentCount,
+          siteProperties: value,
+          getDisplayMessage: function () {
+            var displayMsg = [];
+            var siteProperties = this.get('siteProperties');
+            if (siteProperties) {
+              siteProperties.forEach(function (_siteProperty) {
+                var displayProperty = _siteProperty.siteProperty;
+                var displayNames = _siteProperty.displayNames;
+                /////////
+                if (displayNames && displayNames.length) {
+                  if (displayNames.length === 1) {
+                    displayMsg.push(displayProperty + Em.I18n.t('as') + displayNames[0]);
+                  } else {
+                    var name;
+                    displayNames.forEach(function (_name, index) {
+                      if (index === 0) {
+                        name = _name;
+                      } else if (index === siteProperties.length - 1) {
+                        name = name + Em.I18n.t('and') + _name;
+                      } else {
+                        name = name + ', ' + _name;
+                      }
+                    }, this);
+                    displayMsg.push(displayProperty + Em.I18n.t('as') + name);
+
+                  }
+                } else {
+                  displayMsg.push(displayProperty);
+                }
+              }, this);
+            }
+            return displayMsg;
 
 
-        }.property('siteProperties'),
-        getRunningHostsMessage: function () {
-          return Em.I18n.t('services.service.config.stopService.runningHostComponents').format(this.get('runningComponentCount'), this.get('runningHosts.length'));
-        }.property('runningComponentCount', 'runningHosts.length'), 
-        template: Ember.Handlebars.compile([
-          '<h5>{{view.message}}</h5>',
-          '{{#unless view.flag}}',
-          ' <br/>',
-          ' <div class="pre-scrollable" style="max-height: 250px;">',
-          '   <ul>',
-          '   {{#each val in view.getDisplayMessage}}',
-          '     <li>',
-          '       {{val}}',
-          '     </li>',
-          '   {{/each}}',
-          '   </ul>',
-          ' </div>',
-          '{{/unless}}',
-          '{{#if view.runningHosts}}',
-          ' <i class="icon-warning-sign"></i>  {{view.getRunningHostsMessage}}',
-          ' <table class="table-striped running-host-components-table">',
-          '   <tr><th>{{t common.host}}</th><th>{{t common.components}}</th></tr>',
-          '   {{#each host in view.runningHosts}}',
-          '     <tr><td>{{host.name}}</td><td>{{host.components}}</td></tr>',
-          '   {{/each}}',
-          ' </table>',
-          '{{/if}}'
-        ].join('\n'))
+          }.property('siteProperties'),
+          getRunningHostsMessage: function () {
+            return Em.I18n.t('services.service.config.stopService.runningHostComponents').format(this.get('runningComponentCount'), this.get('runningHosts.length'));
+          }.property('runningComponentCount', 'runningHosts.length'),
+          template: Ember.Handlebars.compile([
+            '<div class="{{unbound view.messageClass}}" style="margin-bottom:0">{{view.message}}</div>',
+            '{{#unless view.flag}}',
+            ' <br/>',
+            ' <div class="pre-scrollable" style="max-height: 250px;">',
+            '   <ul>',
+            '   {{#each val in view.getDisplayMessage}}',
+            '     <li>',
+            '       {{val}}',
+            '     </li>',
+            '   {{/each}}',
+            '   </ul>',
+            ' </div>',
+            '{{/unless}}',
+            '{{#if view.runningHosts}}',
+            ' <i class="icon-warning-sign"></i>  {{view.getRunningHostsMessage}}',
+            ' <table class="table-striped running-host-components-table">',
+            '   <tr><th>{{t common.host}}</th><th>{{t common.components}}</th></tr>',
+            '   {{#each host in view.runningHosts}}',
+            '     <tr><td>{{host.name}}</td><td>{{host.components}}</td></tr>',
+            '   {{/each}}',
+            ' </table>',
+            '{{/if}}'
+          ].join('\n'))
+        })
       })
       })
     });
     });
   },
   },

+ 2 - 2
ambari-web/app/controllers/main/service/item.js

@@ -95,9 +95,9 @@ App.MainServiceItemController = Em.Controller.extend({
   startStopPopupPrimary: function(serviceHealth) {
   startStopPopupPrimary: function(serviceHealth) {
     var requestInfo = "";
     var requestInfo = "";
     if(serviceHealth == "STARTED"){
     if(serviceHealth == "STARTED"){
-      requestInfo = 'Start service ' + this.get('content.serviceName').toUpperCase() ;
+      requestInfo = 'Start ' + this.get('content.displayName');
     }else{
     }else{
-      requestInfo = 'Stop service ' + this.get('content.serviceName').toUpperCase() ;
+      requestInfo = 'Stop ' + this.get('content.displayName');
     }
     }
 
 
     App.ajax.send({
     App.ajax.send({

+ 2 - 3
ambari-web/app/data/config_properties.js

@@ -576,7 +576,7 @@ module.exports =
       "defaultValue": "",
       "defaultValue": "",
       "defaultDirectory": "/hadoop/mapred",
       "defaultDirectory": "/hadoop/mapred",
       "displayType": "directories",
       "displayType": "directories",
-      "isReconfigurable": false,
+      "isReconfigurable": true,
       "isVisible": true,
       "isVisible": true,
       "domain": "tasktracker-global",
       "domain": "tasktracker-global",
       "serviceName": "MAPREDUCE",
       "serviceName": "MAPREDUCE",
@@ -812,9 +812,8 @@ module.exports =
       "description": "",
       "description": "",
       "defaultValue": "/mapred/system",
       "defaultValue": "/mapred/system",
       "displayType": "directories",
       "displayType": "directories",
-      "isReconfigurable": false,
+      "isReconfigurable": true,
       "isVisible": true,
       "isVisible": true,
-      "isRequired": false,
       "domain": "global",
       "domain": "global",
       "serviceName": "MAPREDUCE",
       "serviceName": "MAPREDUCE",
       "category": "Advanced"
       "category": "Advanced"

+ 18 - 18
ambari-web/app/messages.js

@@ -135,20 +135,20 @@ Em.I18n.translations = {
   'requestInfo.startServices':'Start Services',
   'requestInfo.startServices':'Start Services',
   'requestInfo.stopAllServices':'Stop All Services',
   'requestInfo.stopAllServices':'Stop All Services',
   'requestInfo.startAllServices':'Start All Services',
   'requestInfo.startAllServices':'Start All Services',
-  'requestInfo.startHostComponent':'Start Component',
+  'requestInfo.startHostComponent':'Start',
   'requestInfo.startHostComponents':'Start Components',
   'requestInfo.startHostComponents':'Start Components',
-  'requestInfo.upgradeHostComponent':'Upgrade Component',
-  'requestInfo.stopHostComponent':'Stop Component',
-  'requestInfo.installHostComponent':'Install Component',
-  'requestInfo.installNewHostComponent':'Install New Component',
-  'requestInfo.stopService':'Stop Service',
-  'requestInfo.startService':'Start Service',
+  'requestInfo.upgradeHostComponent':'Upgrade',
+  'requestInfo.stopHostComponent':'Stop',
+  'requestInfo.installHostComponent':'Install',
+  'requestInfo.installNewHostComponent':'Install',
+  'requestInfo.stopService':'Stop',
+  'requestInfo.startService':'Start',
 
 
   'hostPopup.noServicesToShow':'No services to show',
   'hostPopup.noServicesToShow':'No services to show',
   'hostPopup.noHostsToShow':'No hosts to show',
   'hostPopup.noHostsToShow':'No hosts to show',
   'hostPopup.noTasksToShow':'No tasks to show',
   'hostPopup.noTasksToShow':'No tasks to show',
 
 
-  'question.sure':'Are you sure {0}?',
+  'question.sure':'Are you sure?',
 
 
   'popup.highlight':'click to highlight',
   'popup.highlight':'click to highlight',
   'popup.confirmation.commonHeader':'Confirmation',
   'popup.confirmation.commonHeader':'Confirmation',
@@ -283,7 +283,7 @@ Em.I18n.translations = {
     'Please confirm the host list and remove any hosts that you do not want to include in the cluster.',
     'Please confirm the host list and remove any hosts that you do not want to include in the cluster.',
   'installer.step3.hostLog.popup.header':'Registration log for {0}',
   'installer.step3.hostLog.popup.header':'Registration log for {0}',
   'installer.step3.hosts.remove.popup.header':'Remove Hosts',
   'installer.step3.hosts.remove.popup.header':'Remove Hosts',
-  'installer.step3.hosts.remove.popup.body':' you want to remove the selected host(s)',
+  'installer.step3.hosts.remove.popup.body':'Are you sure you want to remove the selected host(s)?',
   'installer.step3.hostInformation.popup.header':'Error in retrieving host Information',
   'installer.step3.hostInformation.popup.header':'Error in retrieving host Information',
   'installer.step3.hostInformation.popup.body' : 'All bootstrapped hosts registered but unable to retrieve cpu and memory related information',
   'installer.step3.hostInformation.popup.body' : 'All bootstrapped hosts registered but unable to retrieve cpu and memory related information',
   'installer.step3.hostWarningsPopup.details':'Show Details',
   'installer.step3.hostWarningsPopup.details':'Show Details',
@@ -734,19 +734,19 @@ Em.I18n.translations = {
   'services.service.info.summary.nagios.noAlerts':'No alerts',
   'services.service.info.summary.nagios.noAlerts':'No alerts',
   'services.service.info.summary.nagios.alerts':'Nagios service required for viewing alerts',
   'services.service.info.summary.nagios.alerts':'Nagios service required for viewing alerts',
 
 
-  'services.service.config.startService':'Start Service',
-  'services.service.config.restartService':'Restart Service',
+  'services.service.config.saved':'Saved Configurations Changes',
+  'services.service.config.notSaved':'Unable to Save Configuration Changes',
   'services.service.config.restartService.TooltipMessage':'<b>Restart Service</b><br>Stale configuration used by {0} components on {1} hosts:{2}',
   'services.service.config.restartService.TooltipMessage':'<b>Restart Service</b><br>Stale configuration used by {0} components on {1} hosts:{2}',
-  'services.service.config.saveConfig':'Service configuration applied successfully',
-  'services.service.config.stopService':'Stop Service',
-  'services.service.config.msgServiceStop':'Stop the service and wait till it stops completely. Thereafter you can apply configuration changes',
-  'services.service.config.msgHDFSMapRServiceStop':'Stop HDFS and MapReduce. Wait till both of them stops completely. Thereafter you can apply configuration changes',
+  'services.service.config.saved.message':'Service configuration saved successfully.',
+  'services.service.config.msgServiceStop':'Could not save configuration changes.  Please stop the service first. You will be able to save configuration changes after all of its components are stopped.',
+  'services.service.config.msgHDFSMapRServiceStop':'Could not save configuration changes.  Please stop both HDFS and MapReduce first.  You will be able to save configuration changes after all HDFS and MapReduce components are stopped.',
   'services.service.config.failCreateConfig' : 'Failure in creating service configuration',
   'services.service.config.failCreateConfig' : 'Failure in creating service configuration',
-  'services.service.config.failSaveConfig':'Failure in applying service configuration',
-  'services.service.config.failSaveConfigHostExceptions':'Failure in applying service configuration host exceptions',
+  'services.service.config.failSaveConfig':'Failure in saving service configuration',
+  'services.service.config.failSaveConfigHostExceptions':'Failure in saving service configuration host exceptions',
   'services.service.config.addPropertyWindow.errorMessage':'This is required',
   'services.service.config.addPropertyWindow.errorMessage':'This is required',
-  'services.service.config.addPropertyWindow.error.derivedKey':'Cannot add a known derived property',
+  'services.service.config.addPropertyWindow.error.derivedKey':'This property is already defined',
   'services.service.config.stopService.runningHostComponents':'{0} components on {1} hosts are still running',
   'services.service.config.stopService.runningHostComponents':'{0} components on {1} hosts are still running',
+  'services.service.config.confirmDirectoryChange':'You are about to make changes to service directories that are core to {0}. Before you proceed, be absolutely certain of the implications and that you have taken necessary manual steps, if any, for the changes. Are you sure you want to proceed?',
 
 
   'services.add.header':'Add Service Wizard',
   'services.add.header':'Add Service Wizard',
   'services.reassign.header':'Reassign Master Wizard',
   'services.reassign.header':'Reassign Master Wizard',

+ 1 - 1
ambari-web/app/utils/host_progress_popup.js

@@ -117,7 +117,7 @@ App.HostPopup = Em.Object.create({
     numRunning = allServices.filterProperty("status", App.format.taskStatus("IN_PROGRESS")).length;
     numRunning = allServices.filterProperty("status", App.format.taskStatus("IN_PROGRESS")).length;
     numRunning += allServices.filterProperty("status", App.format.taskStatus("QUEUED")).length;
     numRunning += allServices.filterProperty("status", App.format.taskStatus("QUEUED")).length;
     numRunning += allServices.filterProperty("status", App.format.taskStatus("PENDING")).length;
     numRunning += allServices.filterProperty("status", App.format.taskStatus("PENDING")).length;
-    this.set("popupHeaderName", numRunning + " Background operations Running");
+    this.set("popupHeaderName", numRunning + " Background Operations Running");
   },
   },
 
 
   /**
   /**

+ 2 - 2
ambari-web/app/views/common/modal_popup.js

@@ -129,7 +129,7 @@ App.showReloadPopup = function(){
  * @param {String} body - additional text constant. Will be placed in the popup-body
  * @param {String} body - additional text constant. Will be placed in the popup-body
  * @return {*}
  * @return {*}
  */
  */
-App.showConfirmationPopup = function(primary, body) {
+App.showConfirmationPopup = function(primary, body, template) {
   if (!primary) {
   if (!primary) {
     return false;
     return false;
   }
   }
@@ -137,7 +137,7 @@ App.showConfirmationPopup = function(primary, body) {
     primary: Em.I18n.t('yes'),
     primary: Em.I18n.t('yes'),
     secondary: Em.I18n.t('no'),
     secondary: Em.I18n.t('no'),
     header: Em.I18n.t('popup.confirmation.commonHeader'),
     header: Em.I18n.t('popup.confirmation.commonHeader'),
-    body: Em.I18n.t('question.sure').format(body || ''),
+    body: body || 'Are you sure?',
     onPrimary: function() {
     onPrimary: function() {
       this.hide();
       this.hide();
       primary();
       primary();