You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jl...@apache.org on 2018/04/06 06:50:19 UTC
[ambari] branch branch-feature-AMBARI-14714 updated: AMBARI-23136:
Continued: update execution_command to add two new apis (#891)
This is an automated email from the ASF dual-hosted git repository.
jluniya pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-feature-AMBARI-14714 by this push:
new 8bcb392 AMBARI-23136: Continued: update execution_command to add two new apis (#891)
8bcb392 is described below
commit 8bcb39210033a25b0b8bb18e33d083d899899f80
Author: sduan <sd...@hortonworks.com>
AuthorDate: Thu Apr 5 23:50:17 2018 -0700
AMBARI-23136: Continued: update execution_command to add two new apis (#891)
* AMBARI-23136: Continued: update execution_command to add two new apis
* AMBARI-23136: Continued: update execution_command to add two new apis
---
.../execution_command/execution_command.py | 41 ++++++++++++++++++++--
.../libraries/execution_command/module_configs.py | 34 ++++++++++++++----
.../src/test/python/TestExecutionCommand.py | 24 +++++++++++--
ambari-common/src/test/python/command.json | 10 ++++--
4 files changed, 96 insertions(+), 13 deletions(-)
diff --git a/ambari-common/src/main/python/resource_management/libraries/execution_command/execution_command.py b/ambari-common/src/main/python/resource_management/libraries/execution_command/execution_command.py
index f1bef79..f6b52d7 100644
--- a/ambari-common/src/main/python/resource_management/libraries/execution_command/execution_command.py
+++ b/ambari-common/src/main/python/resource_management/libraries/execution_command/execution_command.py
@@ -36,7 +36,7 @@ class ExecutionCommand(object):
:param command: json string or a python dict object
"""
self._execution_command = command
- self._module_configs = module_configs.ModuleConfigs(self.__get_value("configurations"))
+ self._module_configs = module_configs.ModuleConfigs(self.__get_value("configurations"), self.__get_value("configurationAttributes"))
def __get_value(self, key, default_value=None):
"""
@@ -54,6 +54,15 @@ class ExecutionCommand(object):
except:
return default_value
+ def get_value(self, query_string, default_value=None):
+ """
+ Query config attribute from execution_command directly
+ :param query_string: full query key string
+ :param default_value: if key does not exist, return default value
+ :return: config attribute
+ """
+ return self.__get_value(query_string, default_value)
+
"""
Global variables section
"""
@@ -80,6 +89,12 @@ class ExecutionCommand(object):
def get_cluster_name(self):
return self.__get_value("clusterName")
+ def get_repository_file(self):
+ return self.__get_value("repositoryFile")
+
+ def get_local_components(self):
+ return self.__get_value("localComponents", [])
+
"""
Ambari variables section
"""
@@ -231,10 +246,32 @@ class ExecutionCommand(object):
def need_refresh_topology(self):
return self.__get_value('commandParams/refresh_topology', False)
+ def check_only_update_files(self):
+ return self.__get_value('commandParams/update_files_only', False)
+
"""
Role related variables section
"""
def is_upgrade_suspended(self):
- return self.__get_value('roleParams/upgrade_suspended', False)
\ No newline at end of file
+ return self.__get_value('roleParams/upgrade_suspended', False)
+
+ """
+ Cluster Host Info
+ """
+
+ def get_component_hosts(self, component_name):
+ key = "clusterHostInfo/" + component_name + "_hosts"
+ if component_name == "oozie_server":
+ key = "clusterHostInfo/" + component_name
+ return self.__get_value(key, [])
+
+ def get_all_hosts(self):
+ return self.__get_value('clusterHostInfo/all_hosts', [])
+
+ def get_all_racks(self):
+ return self.__get_value('clusterHostInfo/all_racks', [])
+
+ def get_all_ipv4_ips(self):
+ return self.__get_value('clusterHostInfo/all_ipv4_ips', [])
\ No newline at end of file
diff --git a/ambari-common/src/main/python/resource_management/libraries/execution_command/module_configs.py b/ambari-common/src/main/python/resource_management/libraries/execution_command/module_configs.py
index 967449f..d315b50 100644
--- a/ambari-common/src/main/python/resource_management/libraries/execution_command/module_configs.py
+++ b/ambari-common/src/main/python/resource_management/libraries/execution_command/module_configs.py
@@ -23,18 +23,40 @@ __all__ = ["ModuleConfigs"]
class ModuleConfigs(object):
"""
- This class maps to "/configurations" block in command.json which includes configuration information of a service
+ This class maps to "/configurations" and "/configurationAttributes in command.json which includes configuration information of a service
"""
- def __init__(self, config):
- self.__module_configs = config
+ def __init__(self, configs, configAttributes):
+ self.__module_configs = configs
+ self.__module_config_attributes = configAttributes
- def get_properties(self, module_name, config_type, property_names):
- return map(lambda property_name: self.get_property_value(module_name, config_type, property_name), property_names)
+ def get_all_attributes(self, module_name, config_type):
+ try:
+ return self.__module_config_attributes[config_type]
+ except:
+ return {}
+
+ def get_all_properties(self, module_name, config_type):
+ try:
+ return self.__module_configs[config_type]
+ except:
+ return {}
+
+ def get_properties(self, module_name, config_type, property_names, default=None):
+ properties = {}
+ try:
+ for property_name in property_names:
+ properties[property_name] = self.get_property_value(module_name, config_type, property_name, default)
+ except:
+ return {}
+ return properties
def get_property_value(self, module_name, config_type, property_name, default=None):
try:
- return self.__module_configs[config_type][property_name]
+ if property_name:
+ return self.__module_configs[config_type][property_name]
+ else:
+ return self.__module_configs[config_type]
except:
return default
diff --git a/ambari-common/src/test/python/TestExecutionCommand.py b/ambari-common/src/test/python/TestExecutionCommand.py
index 79da47f..824e2f0 100644
--- a/ambari-common/src/test/python/TestExecutionCommand.py
+++ b/ambari-common/src/test/python/TestExecutionCommand.py
@@ -40,6 +40,14 @@ class TestExecutionCommand(TestCase):
module_name = self.__execution_command.get_module_name()
self.assertEquals(module_name, "ZOOKEEPER")
+ def test_get_oozie_server_hosts(self):
+ oozie_server = self.__execution_command.get_component_hosts('oozie_server')
+ self.assertEqual(oozie_server, 'host2')
+
+ def test_get_ganglia_server_hosts(self):
+ ganglia_server_hosts = self.__execution_command.get_component_hosts('ganglia_server')
+ self.assertEqual(ganglia_server_hosts, 'host1')
+
def test_get_module_configs(self):
module_configs = self.__execution_command.get_module_configs()
self.assertNotEquals(module_configs, None)
@@ -49,12 +57,22 @@ class TestExecutionCommand(TestCase):
self.assertEquals(zookeeper_client_port_fake, None)
zookeeper_client_port_default_value = module_configs.get_property_value("zookeeper", "zoo.cfg", "clientPort1", 1111)
self.assertEquals(int(zookeeper_client_port_default_value), 1111)
- zookeeper_empty_value = module_configs.get_property_value("zookeeper", "zoo_fake", "", {})
+ zookeeper_empty_value = module_configs.get_all_properties("zookeeper", "zoo_fake")
self.assertEquals(zookeeper_empty_value, {})
zookeeper_log_max_backup_size = module_configs.get_property_value('zookeeper', 'zookeeper-log4j',
'zookeeper_log_max_backup_size', 10)
self.assertEquals(zookeeper_log_max_backup_size, 10)
+ properties = module_configs.get_properties("zookeeper", "zoo.cfg", ['clientPort', 'dataDir', 'fake'])
+ self.assertEqual(int(properties.get('clientPort')), 2181)
+ self.assertEqual(properties.get('fake'), None)
def test_get_stack_name(self):
- stack_name = self.__execution_command.get_stack_name()
- self.assertEquals(stack_name, "HDPCORE")
\ No newline at end of file
+ stack_name = self.__execution_command.get_mpack_name()
+ self.assertEquals(stack_name, "HDPCORE")
+
+ def test_access_to_module_configs(self):
+ module_configs = self.__execution_command.get_module_configs()
+ is_zoo_cfg_there = module_configs.get_property_value("zookeeper", "zoo.cfg", "") is not None
+ self.assertTrue(is_zoo_cfg_there)
+ zoo_cfg = module_configs.get_property_value("zookeeper", "zoo.cfg", "")
+ self.assertTrue(isinstance(zoo_cfg, dict))
\ No newline at end of file
diff --git a/ambari-common/src/test/python/command.json b/ambari-common/src/test/python/command.json
index 220a85c..b54f3df 100644
--- a/ambari-common/src/test/python/command.json
+++ b/ambari-common/src/test/python/command.json
@@ -83,11 +83,17 @@
"zk_user": "zookeeper"
}
},
- "hostLevelParams": {
+ "clusterLevelParams": {
"stack_name": "HDPCORE",
"group_list": "[\"hdfs\",\"users\"]",
- "host_sys_prepped": "false",
"jdk_name": "jdk-8u112-linux-x64.tar.gz",
"stack_version": "1.0.0-b141"
+ },
+ "ambariLevelParams": {
+ "host_sys_prepped": "false"
+ },
+ "clusterHostInfo": {
+ "ganglia_server_hosts": "host1",
+ "oozie_server": "host2"
}
}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
jluniya@apache.org.