AMBARI-7521 Adding a component to a host should check for the presence of host scope dependencies of that component. (Buzhor Denys via atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e7ce4bb6 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e7ce4bb6 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e7ce4bb6 Branch: refs/heads/branch-alerts-dev Commit: e7ce4bb6fd7b287051214ffeb4c9828b6ee43e94 Parents: 353daeb Author: atkach <[email protected]> Authored: Fri Sep 26 18:27:05 2014 +0300 Committer: atkach <[email protected]> Committed: Fri Sep 26 18:27:05 2014 +0300 ---------------------------------------------------------------------- ambari-web/app/controllers/main/host/details.js | 10 +++++++++- ambari-web/app/messages.js | 2 ++ ambari-web/app/utils/components.js | 12 ++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e7ce4bb6/ambari-web/app/controllers/main/host/details.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/host/details.js b/ambari-web/app/controllers/main/host/details.js index 11e5d04..5a698da 100644 --- a/ambari-web/app/controllers/main/host/details.js +++ b/ambari-web/app/controllers/main/host/details.js @@ -19,6 +19,7 @@ var App = require('app'); var batchUtils = require('utils/batch_scheduled_requests'); var componentsUtils = require('utils/components'); +var stringUtils = require('utils/string_utils'); App.MainHostDetailsController = Em.Controller.extend({ @@ -392,7 +393,14 @@ App.MainHostDetailsController = Em.Controller.extend({ var self = this; var component = event.context; var componentName = component.get('componentName'); - + var missedComponents = componentsUtils.checkComponentDependencies(componentName, this.get('content.hostComponents').mapProperty('componentName')) + if (!!missedComponents.length) { + var popupMessage = Em.I18n.t('host.host.addComponent.popup.dependedComponents.body').format(component.get('displayName'), + stringUtils.getFormattedStringFromArray(missedComponents.map(function(cName) { + return App.StackServiceComponent.find(cName).get('displayName'); + }))); + return App.showAlertPopup(Em.I18n.t('host.host.addComponent.popup.dependedComponents.header'), popupMessage); + } if (componentName === 'ZOOKEEPER_SERVER') { return App.showConfirmationPopup(function () { self.primary(component); http://git-wip-us.apache.org/repos/asf/ambari/blob/e7ce4bb6/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index 2dd6225..c8e94a9 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -1709,6 +1709,8 @@ Em.I18n.translations = { 'hosts.host.addComponent.msg':'Are you sure you want to add {0}?', 'hosts.host.addComponent.addZooKeeper':'Adding ZooKeeper Server may reconfigure such properties:<ul><li>ha.zookeeper.quorum</li><li>hbase.zookeeper.quorum</li><li>templeton.zookeeper.hosts</li><li>yarn.resourcemanager.zk-address</li><li>hive.zookeeper.quorum</li></ul>', 'hosts.host.addComponent.deleteHostWithZooKeeper':'Deleting host with ZooKeeper Server may reconfigure such properties:<ul><li>ha.zookeeper.quorum</li><li>hbase.zookeeper.quorum</li><li>templeton.zookeeper.hosts</li><li>yarn.resourcemanager.zk-address</li><li>hive.zookeeper.quorum</li></ul>', + 'host.host.addComponent.popup.dependedComponents.body': '{0} requires {1} to be installed along with it. Please add them first and then try adding {0}', + 'host.host.addComponent.popup.dependedComponents.header': 'Component dependencies', 'hosts.host.zooKeeper.configs.save.note': 'This configuration is created by ambari while installing/deleting zookeeper component on a host', 'hosts.host.addComponent.note':'<b>Important:</b> After this <i>{0}</i> is installed, go to <i>Services -> Nagios</i> to restart the Nagios service. This is required for the alerts and notifications to work properly.', 'hosts.host.addComponent.securityNote':'You are running your cluster in secure mode. You must set up the keytab for {0} on {1} before you proceed. Otherwise, the component will not be able to start properly.', http://git-wip-us.apache.org/repos/asf/ambari/blob/e7ce4bb6/ambari-web/app/utils/components.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/components.js b/ambari-web/app/utils/components.js index a7fadec..63c5348 100644 --- a/ambari-web/app/utils/components.js +++ b/ambari-web/app/utils/components.js @@ -134,6 +134,18 @@ module.exports = { var newWindow = window.open(url); newWindow.focus(); } + }, + /** + * Check if all required components are installed on host. + * + * @param {String} componentName + * @param {Array} installedComponentNames + * @return {Array} - names of missed components + */ + checkComponentDependencies: function(componentName, installedComponentNames) { + return App.StackServiceComponent.find(componentName).get('dependencies').filter(function(dependency) { + return !installedComponentNames.contains(dependency) + }); } }; \ No newline at end of file
