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.